package math;

/**
 * 给你两个正整数 low 和 high 。
 * 对于一个由 2 * n 位数字组成的整数 x ，如果其前 n 位数字之和与后 n 位数字之和相等，则认为这个数字是一个对称整数。
 * <p>
 * 返回在 [low, high] 范围内的 对称整数的数目 。
 * <p>
 * 示例 1：
 * 输入：low = 1, high = 100
 * 输出：9
 * 解释：在 1 到 100 范围内共有 9 个对称整数：11、22、33、44、55、66、77、88 和 99 。
 * <p>
 * 示例 2：
 * 输入：low = 1200, high = 1230
 * 输出：4
 * 解释：在 1200 到 1230 范围内共有 4 个对称整数：1203、1212、1221 和 1230 。
 *
 * @author jishenghuang
 * @version 20250411
 */
public class CountSymmetricIntegers_2843 {
    /**
     * Return the symmetric integer between low and high
     *
     * @param low  the low number
     * @param high the high number
     * @return count is the number of the symmetric integers
     */
    public static int countSymmetricIntegers(int low, int high) {
        int count = 0;

        for (int num = low; num <= high; ++num) {
            // Convert num to string
            String str = Integer.toString(num);
            int len = str.length();

            // Invalid if str is odd length
            if (len % 2 != 0) {
                ++num;
                continue;
            }

            int half = len / 2;
            int leftSum = 0;
            int rightSum = 0;

            for (int i = 0; i < half; ++i) {
                leftSum += str.charAt(i) - '0';
            }

            for (int i = half; i < len; ++i) {
                rightSum += str.charAt(i) - '0';
            }

            if (leftSum == rightSum) {
                ++count;
            }
        }

        return count;
    }

    public static void main(String[] args) {
        int low = 1;
        int high = 100;

        System.out.println(countSymmetricIntegers(low, high));

        low = 1200;
        high = 1230;

        System.out.println(countSymmetricIntegers(low, high));
    }
}